Transactional storage systems generally provide, at least in part, a number of desired transactional properties such as atomicity, consistency, isolation, and durability, often described using the acronym “ACID”. In particular, Atomicity refers to the ability to execute a transaction such that either all changes within the transaction are committed or none of the changes within the transaction are committed. The transaction is considered “atomic” because the changes within the transaction are treated as a whole and are not broken down into smaller sub-sets. Consistency refers to the storage system being in a legal state both at the initiation of the transaction and at the completion of the transaction. This means that a transaction cannot break the rules of the storage system, which may be referred to as integrity constraints. For example, if a storage system has a rule that any two files in the same directory must have different names, then any transaction resulting in two files within the same directory having the same name will be aborted.
Isolation refers to the ability to ensure that multiple programs attempting to concurrently modify the storage system state do not interfere with one another. Ideally, the storage system behaves as if the modifications were done in some sequential order, even though the implementation might execute the modifications in parallel. Durability refers to the guarantee that, once a transaction is successfully committed, the transaction will persist and will not be undone. This means, for example, that a committed transaction will survive system failure, and also that a committed transaction will satisfy the integrity constraints of the storage system.
To illustrate some advantages of transactional properties, and, in particular, the property of atomicity, consider an on-line banking application that enables various financial transactions to be performed from a personal computer. This application will store information on the local disk, such as the current state of the bank accounts, records of past transactions on the account, and historical stock price information. Suppose that the application is processing a share purchase, and that the application has updated a bank account with a debit to pay for the newly purchased shares. Also suppose that, just prior to updating a portfolio with the newly purchased shares, there is a power failure on the personal computer. In a non-transactional storage system, after the power comes back, the stored data will indicate a payment for the shares but no shares in the portfolio. Obviously, this scenario may lead to considerable confusion and questions. Most such applications will likely update information in many different places on the disk, and it will likely involve considerable time and effort to find all possible ways in which updates to the disk can fail. Thus, writing special recovery code for each situation is not practical. A transactional storage system solves these problems in a systematic way. Either all the updates are performed or none of them are performed. In either case, the information in the storage system remains consistent.
Some storage systems are only transactional for part of the data which they store. For example, the widely used New Technology File System (NTFS) from MICROSOFT Corp. of Redmond, Wash., is one such partially transactional file system. NTFS is transactional for file meta-data, but does not provide full transactional guarantees for data inside a file. These partially transactional storage systems provide transactional properties to those portions of the stored data for which the benefits of the transactional properties are most advantageous, while not burdening all of the stored data with the administrative complexities associated with a transactional system.
A sealed storage system is a different and more recently introduced storage system that provides different benefits than those of transactional storage systems. The sealed storage system restricts access to underlying data to only a set of one or more secured applications. Restricting access to the data in this manner may, for example, protect against a virus, Trojan program, or other malicious program that may try to change and/or damage the stored data. A sealed storage system may also protect the privacy of its users by helping to maintain the confidentiality of the stored data. In the above example of the financial data, the banking application may be the only secured application that is permitted to read or modify the stored data. This may, for example, protect malicious users from adding a fictitious bill to a list of bills to be paid, otherwise debiting the account in an unauthorized manner, or reading confidential financial transactions.